var express = require('express');
var router = express.Router();

var UserToken = require('../db/user_tokens.js');
var orderDao = require('../dao/order.js');
require('../util/common.js');
var CONFIG = require('../config');
var orderRoutes = module.exports;

/**
 * 订单详情列表
 * @param  token
 * @param  size
 * @param  page
 *         url/order/list
 */
orderRoutes.list = function(req, res) {
    var par = req.body;
    if(!par.token) return res.json(new ERR('token不能为空！', 400));
    UserToken.checkAllLogin(par.token, null, function (err, errCode, userInfo) {
        if (err) {
            return res.json(new ERR(err, 400));
        }
        par.size = parseInt(par.size);
        if(!par.page) {
            par.start = 0;
        } else {
            par.start = (parseInt(par.page) - 1) * parseInt(par.size);
        }
        if(userInfo.isAdmin) {
            par.isAdmin = true;
        } else {
            userInfo.uid = par.uid;
        }
        orderDao.list(par, function(err, result){
            if(err) {
                res.json(new ERR(err, 400));
            } else {
                res.json(new PKG(result));
            }
        });
    });
}
router.post('/list', orderRoutes.list);

/**
 * 确认订单
 * @param  token
 * @param  ids
 * 返回的状态码如果是101即为未添加地址的用户  跳转到新增地址页面
 *         url/order/confirmOrder
 */
orderRoutes.confirmOrder = function(req, res) {
    var par = req.body;
    if(!par.token) return res.json(new ERR('token不能为空！', 400));
    UserToken.checkAllLogin(par.token, null, function (err, errCode, userInfo) {
        if (err) {
            return res.json(new ERR(err, 400));
        }
        if(userInfo.isAdmin) return res.json(new ERR('账号信息有误！', 400));
        par.uid = userInfo.uid;
        if(!par.ids) return res.json(new ERR('ids不能为空！', 400));
        par.ids = JSON.parse(par.ids);
        orderDao.confirmOrder(par, function(err, data){
            if(err) {
                res.json(new ERR(err, 400));
            } else {
                if(data.status == 101) {
                    res.json(data);
                } else {
                    res.json(new PKG(data));
                }
            }
        });
    });
}
router.post('/confirmOrder', orderRoutes.confirmOrder);

/**
 * 提交订单
 * @param  token      (必传)
 * @param  add_id     (不传则为默认地址)
 * @param  comment    (备注  不传则为空)
 * @param  ids        (购物车的ids)
 *         url/order/submitOrder
 */
orderRoutes.submitOrder = function(req, res) {
    var par = req.body;
    if(!par.token) return res.json(new ERR('token不能为空！', 400));
    UserToken.checkAllLogin(par.token, null, function (err, errCode, userInfo) {
        if (err) {
            return res.json(new ERR(err, 400));
        }
        if(userInfo.isAdmin) return res.json(new ERR('账号信息有误！', 400));
        if(!par.ids) return res.json(new ERR('ids不能为空！', 400));
        par.ids = JSON.parse(par.ids);
        par.uid = userInfo.uid;
        orderDao.submitOrder(par, function(err, data){
            if(err) {
                res.json(new ERR(err, 400));
            } else {
                res.json(new PKG(data));
            }
        });
    });
}
router.post('/submitOrder', orderRoutes.submitOrder);

/**
 * 根据订单编号提交订单
 * @param  token      (必传)
 * @param  order_code
 *         url/order/submitByOrderCode
 */
orderRoutes.submitByOrderCode = function(req, res) {
    var par = req.body;
    if(!par.token) return res.json(new ERR('token不能为空！', 400));
    UserToken.checkAllLogin(par.token, null, function (err, errCode, userInfo) {
        if (err) {
            return res.json(new ERR(err, 400));
        }
        if(userInfo.isAdmin) return res.json(new ERR('账号信息有误！', 400));
        if(userInfo.order_code) return res.json(new ERR('order_code不为空！', 400));
        par.uid = userInfo.uid;
        orderDao.submitByOrderCode(par, function(err, data){
            if(err) {
                res.json(new ERR(err, 400));
            } else {
                res.json(new PKG(data));
            }
        });
    });
}
router.post('/submitByOrderCode', orderRoutes.submitByOrderCode);


/**
 * 获取版本号
 * @param   app_key
 * @param   app_sign
 * @param   app_time
 *         url/order/getVersion
 */
orderRoutes.getVersion = function(req, res) {
    var par = req.body;
    if(!par.app_time) return res.json(new ERR('app_time 不为空！', 400));
    if(!par.app_sign) return res.json(new ERR('app_sign 不为空！', 400));
    if(!par.app_key) return res.json(new ERR('app_key 不为空！', 400));
    var sign = getAppSign (par.app_key, CONFIG.APP_secret, par.app_time);
    if(sign != par.app_sign) {
        return res.json(new ERR('签名不合法！', 400));
    }

    orderDao.getVersion(function(e, d){
        if(e) {
            res.json(new ERR(e, 400));
        } else {
            res.json(new PKG(d));
        }
    });
}
router.post('/getVersion', orderRoutes.getVersion);

module.exports = router;